#include <iostream>
#include <memory>
#include <functional>
#include "tcp_server.hpp"
#include "cal_protocol.hpp"
#include "server_cal.hpp"

void usage(char * cmd) { std::cout << cmd << " server_port[1024+]\n"; }

int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        usage(argv[0]);
        return 1;
    }
    std::unique_ptr<tcp_server> pts(new tcp_server(std::bind(&server_cal::cal_in_server, server_cal(), std::placeholders::_1), 8080));
    pts->init();
    
    pts->start();

    // // 序列化
    // request r(10, 6, '+');
    // std::string s = r.seraliaze();
    // std::cout << s << std::endl;
    // std::string mesg = encode(s);
    // std::cout << mesg << std::endl;

    // std::cout << "反序列化：\n";
    // // 反序列化
    // s.clear();
    // decode(mesg, &s);
    // std::cout << s << std::endl;
    // request tmp;
    // tmp.deseraliaze(s);
    // std::cout << tmp._l << tmp._op << tmp._r << std::endl;

    return 0;
}

    // response r(10, 1);
    // std::string s;
    // bool bl = r.seraliaze(&s);
    // std::cout << s << std::endl;
    // response tmp;
    // tmp.deseraliaze(s);
    // std::cout << tmp._exit_code << ' ' << tmp._result << std::endl;

    // 测试read函数
    // int fd = open("./text.txt", O_RDONLY);
    // char inbuffer[1024];
    // ssize_t n = read(fd, inbuffer, 1024);
    // std::cout << n << std::endl;
    // inbuffer[n] = 0;
    // std::cout << inbuffer << std::endl;
    // close(fd);

    // 序列化
    // request r(10, 6, '+');
    // std::string s = r.seraliaze();
    // std::cout << s << std::endl;
    // std::string mesg = encode(s);
    // std::cout << mesg << std::endl;

    // std::cout << "反序列化：\n";
    // // 反序列化
    // s.clear();
    // decode(mesg, &s);
    // std::cout << s << std::endl;
    // request tmp;
    // tmp.deseraliaze(s);
    // std::cout << tmp._l << tmp._op << tmp._r << std::endl;
